SalesforceをJavaScriptで操作しよう!(JSforceによるクエリでIN句を表現する)
SalesforceのオブジェクトをIN句で検索する
Salesforceのレコード検索に用いるSOQL(Salesforce Object Query Language)では、次のようにIN句を使ってレコードを絞り込むことができます。
/* 名前(Name)がA社、B社、C社のいずれかにマッチする取引先だけ取得する */ List<String> names = new List<String>{'A社', 'B社', 'C社'}; List<Account> accounts = [SELECT Id, Name, CreatedDate FROM Account WHERE Name IN :names]; System.debug(accounts);
JSforceはJavaScriptからSalesforceのAPIにアクセスするライブラリです。
このJSforceで先述のIN句を使うためには次のようにします。
const names = ['A社', 'B社', 'C社'] const accounts = [] conn .sobject("Account") .find({ 'Name': { $in: names } }, ['Id', 'Name', 'CreatedDate']) .on("record", (record) => { accounts.push(record) }) .on("end", () => { }) .on("error", (err) => { console.error(err) }) .run({ autoFetch : true, maxFetch : 100 })
この例だと、3つ(A社、B社、C社)しか選択肢がないので、あまり有り難みがわかりませんが、何百、何千件という要素のListをIN句に渡したいときに便利です。直にSOQLを構築するやり方だと、SOQLの長さ制限に引っかかってしまいますので。
SOQL と SOSL の制限 | Salesforce の制限クイックリファレンスガイド | Salesforce Developers
IN句以外にもいろいろあります
IN句の他にも、LIKEや比較演算子(<, <=, >, >=)も使えます。
conn.sobject("Contact") .find({ LastName: { $like : 'A%' }, CreatedDate: { $gte : jsforce.Date.YESTERDAY }, 'Account.Name': { $in ['クラスメソッド株式会社', 'アノテーション株式会社'] } }, [ 'Id', 'Name', 'CreatedDate' ]) .execute(function(err, records) { if (err) { return console.error(err) } console.log("fetched : " + records.length) console.log(JSON.stringify(records, null, 2)) })
この例では、親の取引先名が「クラスメソッド株式会社」か「アノテーション株式会社」で、名字がAで始まる、昨日以降に作られた取引先責任者を取得しています。
現在、サポートしているのは次のオペレータのようです。
オペレータ | 作用 |
---|---|
$ne | != (not equal) |
$lt | < (less than) |
$lt | <= (less than equal) |
$gt | > (grater than) |
$gte | >= (grater than equal) |
$in | IN |
$nin | NOT IN |
$like | LIKE |
$exists | EXISTS |
JSforceの何が嬉しい?何が便利?
この他にもJSforceを使うと
- レコードのCRUD(Create, Retrieve, Update, Upsert, Destroy)が可能
- Metadataを扱える
- Apex REST APIをコールできる
- Bulk処理ができる
などが簡単にできますので、次のようなメリット、便利さがあります。
- JavaScript、Node.js、Visualforce、コマンドラインから簡単にSalesforce APIを実行できる
- 特にコマンドラインから使えるちょっとしたツールを作るのに便利
- 私が過去に作ったことのある具体例
- 組織のAccount、Contact、Leadなどの重複を調べるツール
- 組織の重複レコードをマージするツール
- 組織から取り出した情報で他のAPIのPATCHを呼び出して、更新をかけるツール
- 私が過去に作ったことのある具体例
- React Nativeなど、アプリからSalesforce APIを呼び出すことにも使える
JavaScriptに慣れた人にとってはかなり便利に使えるライブラリですので、おすすめですー。